﻿using SanFranciscoModel.Alumno;
using SanFranciscoModel.Curso;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SanFranciscoModel.Intermedias;
using SanFranciscoModel.Maestros;
using SanFranciscoModel.Horarios;

namespace SanFrancisco
{
    public partial class ModificarAsignarAlumnoCurso : Form
    {
        private int _DNI;
        private Alumno _Alumno;
        public ModificarAsignarAlumnoCurso(int dni)
        {
            _DNI=dni;
            InitializeComponent();
        }
        
        private void AsignarAlumnoCurso_Load(object sender, EventArgs e)
        {
            _Alumno = CargarAlumno();
            CargarCursos();

        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            AlumnoXCursoManager AlumnoXCursoManager = new AlumnoXCursoManager();

            MaestroSetting MaestroSettings = MaestroManager.getMaestroSettings();
            AlumnoManager alm = new AlumnoManager();
            if (alm.getCantidadDeAlumnosEnCurso((int)cmbCurso.SelectedValue) >= MaestroSettings.CantidadMaximadeAlumnosPorCurso)
            {
                MessageBox.Show("Imposible asignar el alumno al curso dado que el curso supera la cantidad de alumnos permitida!");
                this.Close();
            }
            else
            {
                
                AlumnoXCurso AlumnoXCursoGuardar = new SanFranciscoModel.Intermedias.AlumnoXCurso();
                AlumnoXCurso AlumnoXCursoAnterior = new SanFranciscoModel.Intermedias.AlumnoXCurso();
                Curso curso = AlumnoXCursoManager.getAlumnoXCursobyDNIAlumno(_DNI);

                AlumnoXCursoAnterior.idCurso = curso.idCurso;
                AlumnoXCursoAnterior.DNIAlumno = _Alumno.DNIAlumno;

                AlumnoXCursoGuardar.DNIAlumno = _Alumno.DNIAlumno;
                AlumnoXCursoGuardar.idCurso = (int)cmbCurso.SelectedValue;
                AlumnoXCursoManager.updateAlumnoXCurso(AlumnoXCursoGuardar, AlumnoXCursoAnterior);
                GuardarAsistenciasAnteriores();
                MessageBox.Show("Alumno asignado con exito!");
                this.Close();
            }
        }

        public Alumno CargarAlumno()
        { 
            AlumnoManager AlumnoManager = new AlumnoManager();
            Alumno Alumno = new SanFranciscoModel.Alumno.Alumno();

            txtDni.Text = _DNI.ToString();
            Alumno = AlumnoManager.getAlumnobyDNI(_DNI);
            txtApellido.Text = Alumno.Apellido;
            txtNombre.Text = Alumno.Nombre;

            return Alumno;
        }

        public void CargarCursos()
        {
            List<CursoManager> CursoManagerList = new List<CursoManager>();
            CursoManager CursoManager = new SanFranciscoModel.Curso.CursoManager();
            List<Curso> Curso = CursoManager.getNombreCurso();
            DateTime DateTime = DateTime.Now;
            AutoCompleteStringCollection coleccion = new AutoCompleteStringCollection();
            List<ComboboxItem> listacombo = new List<ComboboxItem>();

            foreach (var objeto in Curso)
            {
                //Si son de el año corriente lo meto en la lista, sino no!
                if (DateTime.Year.ToString().Equals(objeto.Año.ToString()))
                {
                    ComboboxItem cmb = new ComboboxItem();
                    cmb.Text = objeto.NombreCurso;
                    cmb.Value = objeto.idCurso;
                    listacombo.Add(cmb);
                   // coleccion.Add(objeto.idCurso.ToString());
                   // coleccion.Add("id: " + objeto.idCurso.ToString() + " - " + objeto.NombreCurso);
                }
            }

            cmbCurso.DataSource = listacombo;
            cmbCurso.DisplayMember = "Text";
            cmbCurso.ValueMember = "Value";

            //Pongo al alumno en el curso que tenia originalmente
            AlumnoXCursoManager AlumnoXCursoManager = new AlumnoXCursoManager();
            Curso curso = AlumnoXCursoManager.getAlumnoXCursobyDNIAlumno(_DNI);

            cmbCurso.Text = curso.NombreCurso;
            cmbCurso.ValueMember = curso.idCurso.ToString();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            AlumnoXCursoManager AlumnoXCursoManager = new AlumnoXCursoManager();

            if (AlumnoXCursoManager.yaAsignadoCurso(_Alumno.DNIAlumno))
            {
                MessageBox.Show("Error: El alumno ya pertenece a un curso!");
                this.Close();
            }
            else
            {
                MaestroSetting MaestroSettings = MaestroManager.getMaestroSettings();
                AlumnoManager alm = new AlumnoManager();
                if (alm.getCantidadDeAlumnosEnCurso((int)cmbCurso.SelectedValue) >= MaestroSettings.CantidadMaximadeAlumnosPorCurso)
                {
                    MessageBox.Show("Imposible asignar el alumno al curso dado que el curso supera la cantidad de alumnos permitida!");
                    this.Close();
                }
                else
                {
                    AlumnoXCursoManager.guardarAlumnoXCurso(_Alumno.DNIAlumno, (int)cmbCurso.SelectedValue);
                    GuardarAsistenciasAnteriores();
                    MessageBox.Show("Alumno asignado con exito!");

                    //Vuelvo a abrir el seleccionador de Alumnos para que se repita el proceso
                    IngresoDNI Alumno = new IngresoDNI(19, "Por favor ingrese DNI del Alumno: ", SearchTipo.Alumno);
                    Alumno.StartPosition = FormStartPosition.CenterScreen;
                    Alumno.ShowDialog();
                    this.Close();
                }
            }
        }

        private void GuardarAsistenciasAnteriores()
        {
            AlumnoManager AlumnoManager = new AlumnoManager();

            //Armo la lista de asistencias
            List<AsistenciaAlumno> ListAsistenciaAlumno = new List<AsistenciaAlumno>();

            List<DateTime> ListHorariosNecesarios = MaestroManager.getListaHorarioHastaAltaAlumno(_Alumno.DNIAlumno);

            foreach (DateTime dt in ListHorariosNecesarios)
            {
                AsistenciaAlumno aa = new AsistenciaAlumno();
                aa.Asistio = 3;
                aa.DNIAlumno = _Alumno.DNIAlumno;
                aa.Fecha = dt.Date;
                aa.idCurso = (int)cmbCurso.SelectedValue;

                ListAsistenciaAlumno.Add(aa);
            }

            AlumnoManager.guardarAsistenciaAlumno(ListAsistenciaAlumno);
        }

        private void txtCuposDisponibles_TextChanged(object sender, EventArgs e)
        {

        }

        private void cmbCurso_SelectedIndexChanged(object sender, EventArgs e)
        {
            
        }

    }
}
